package io.kubernetes.client.openapi.models;

import io.kubernetes.client.fluent.VisitableBuilder;
import com.google.gson.annotations.SerializedName;
import io.kubernetes.client.fluent.Nested;
import java.util.ArrayList;
import java.lang.String;
import java.util.function.Predicate;
import java.lang.Deprecated;
import java.util.Iterator;
import java.util.List;
import java.lang.Boolean;
import io.kubernetes.client.fluent.Fluent;
import java.lang.Long;
import java.util.Collection;

public interface V1PodSecurityContextFluent<A extends io.kubernetes.client.openapi.models.V1PodSecurityContextFluent<A>> extends io.kubernetes.client.fluent.Fluent<A> {


    public java.lang.Long getFsGroup();
    public A withFsGroup(java.lang.Long fsGroup);
    public java.lang.Boolean hasFsGroup();
    public java.lang.String getFsGroupChangePolicy();
    public A withFsGroupChangePolicy(java.lang.String fsGroupChangePolicy);
    public java.lang.Boolean hasFsGroupChangePolicy();
    
    @java.lang.Deprecated
        
    /**
     * Method is deprecated. use withFsGroupChangePolicy instead.
     */
        public A withNewFsGroupChangePolicy(java.lang.String original);
    public java.lang.Long getRunAsGroup();
    public A withRunAsGroup(java.lang.Long runAsGroup);
    public java.lang.Boolean hasRunAsGroup();
    public java.lang.Boolean getRunAsNonRoot();
    public A withRunAsNonRoot(java.lang.Boolean runAsNonRoot);
    public java.lang.Boolean hasRunAsNonRoot();
    public java.lang.Long getRunAsUser();
    public A withRunAsUser(java.lang.Long runAsUser);
    public java.lang.Boolean hasRunAsUser();
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildSeLinuxOptions instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1SELinuxOptions getSeLinuxOptions();
    public io.kubernetes.client.openapi.models.V1SELinuxOptions buildSeLinuxOptions();
    public A withSeLinuxOptions(io.kubernetes.client.openapi.models.V1SELinuxOptions seLinuxOptions);
    public java.lang.Boolean hasSeLinuxOptions();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeLinuxOptionsNested<A> withNewSeLinuxOptions();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeLinuxOptionsNested<A> withNewSeLinuxOptionsLike(io.kubernetes.client.openapi.models.V1SELinuxOptions item);
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeLinuxOptionsNested<A> editSeLinuxOptions();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeLinuxOptionsNested<A> editOrNewSeLinuxOptions();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeLinuxOptionsNested<A> editOrNewSeLinuxOptionsLike(io.kubernetes.client.openapi.models.V1SELinuxOptions item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildSeccompProfile instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1SeccompProfile getSeccompProfile();
    public io.kubernetes.client.openapi.models.V1SeccompProfile buildSeccompProfile();
    public A withSeccompProfile(io.kubernetes.client.openapi.models.V1SeccompProfile seccompProfile);
    public java.lang.Boolean hasSeccompProfile();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeccompProfileNested<A> withNewSeccompProfile();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeccompProfileNested<A> withNewSeccompProfileLike(io.kubernetes.client.openapi.models.V1SeccompProfile item);
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeccompProfileNested<A> editSeccompProfile();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeccompProfileNested<A> editOrNewSeccompProfile();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeccompProfileNested<A> editOrNewSeccompProfileLike(io.kubernetes.client.openapi.models.V1SeccompProfile item);
    public A addToSupplementalGroups(int index,java.lang.Long item);
    public A setToSupplementalGroups(int index,java.lang.Long item);
    public A addToSupplementalGroups(java.lang.Long... items);
    public A addAllToSupplementalGroups(java.util.Collection<java.lang.Long> items);
    public A removeFromSupplementalGroups(java.lang.Long... items);
    public A removeAllFromSupplementalGroups(java.util.Collection<java.lang.Long> items);
    public java.util.List<java.lang.Long> getSupplementalGroups();
    public java.lang.Long getSupplementalGroup(int index);
    public java.lang.Long getFirstSupplementalGroup();
    public java.lang.Long getLastSupplementalGroup();
    public java.lang.Long getMatchingSupplementalGroup(java.util.function.Predicate<java.lang.Long> predicate);
    public java.lang.Boolean hasMatchingSupplementalGroup(java.util.function.Predicate<java.lang.Long> predicate);
    public A withSupplementalGroups(java.util.List<java.lang.Long> supplementalGroups);
    public A withSupplementalGroups(java.lang.Long... supplementalGroups);
    public java.lang.Boolean hasSupplementalGroups();
    public A addToSysctls(int index,io.kubernetes.client.openapi.models.V1Sysctl item);
    public A setToSysctls(int index,io.kubernetes.client.openapi.models.V1Sysctl item);
    public A addToSysctls(io.kubernetes.client.openapi.models.V1Sysctl... items);
    public A addAllToSysctls(java.util.Collection<io.kubernetes.client.openapi.models.V1Sysctl> items);
    public A removeFromSysctls(io.kubernetes.client.openapi.models.V1Sysctl... items);
    public A removeAllFromSysctls(java.util.Collection<io.kubernetes.client.openapi.models.V1Sysctl> items);
    public A removeMatchingFromSysctls(java.util.function.Predicate<io.kubernetes.client.openapi.models.V1SysctlBuilder> predicate);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildSysctls instead.
     * @return The buildable object.
     */
        public java.util.List<io.kubernetes.client.openapi.models.V1Sysctl> getSysctls();
    public java.util.List<io.kubernetes.client.openapi.models.V1Sysctl> buildSysctls();
    public io.kubernetes.client.openapi.models.V1Sysctl buildSysctl(int index);
    public io.kubernetes.client.openapi.models.V1Sysctl buildFirstSysctl();
    public io.kubernetes.client.openapi.models.V1Sysctl buildLastSysctl();
    public io.kubernetes.client.openapi.models.V1Sysctl buildMatchingSysctl(java.util.function.Predicate<io.kubernetes.client.openapi.models.V1SysctlBuilder> predicate);
    public java.lang.Boolean hasMatchingSysctl(java.util.function.Predicate<io.kubernetes.client.openapi.models.V1SysctlBuilder> predicate);
    public A withSysctls(java.util.List<io.kubernetes.client.openapi.models.V1Sysctl> sysctls);
    public A withSysctls(io.kubernetes.client.openapi.models.V1Sysctl... sysctls);
    public java.lang.Boolean hasSysctls();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SysctlsNested<A> addNewSysctl();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SysctlsNested<A> addNewSysctlLike(io.kubernetes.client.openapi.models.V1Sysctl item);
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SysctlsNested<A> setNewSysctlLike(int index,io.kubernetes.client.openapi.models.V1Sysctl item);
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SysctlsNested<A> editSysctl(int index);
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SysctlsNested<A> editFirstSysctl();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SysctlsNested<A> editLastSysctl();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SysctlsNested<A> editMatchingSysctl(java.util.function.Predicate<io.kubernetes.client.openapi.models.V1SysctlBuilder> predicate);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildWindowsOptions instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1WindowsSecurityContextOptions getWindowsOptions();
    public io.kubernetes.client.openapi.models.V1WindowsSecurityContextOptions buildWindowsOptions();
    public A withWindowsOptions(io.kubernetes.client.openapi.models.V1WindowsSecurityContextOptions windowsOptions);
    public java.lang.Boolean hasWindowsOptions();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.WindowsOptionsNested<A> withNewWindowsOptions();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.WindowsOptionsNested<A> withNewWindowsOptionsLike(io.kubernetes.client.openapi.models.V1WindowsSecurityContextOptions item);
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.WindowsOptionsNested<A> editWindowsOptions();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.WindowsOptionsNested<A> editOrNewWindowsOptions();
    public io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.WindowsOptionsNested<A> editOrNewWindowsOptionsLike(io.kubernetes.client.openapi.models.V1WindowsSecurityContextOptions item);
    public interface SeLinuxOptionsNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1SELinuxOptionsFluent<io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeLinuxOptionsNested<N>> {

            public N and();
            public N endSeLinuxOptions();    }


    public interface SeccompProfileNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1SeccompProfileFluent<io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SeccompProfileNested<N>> {

            public N and();
            public N endSeccompProfile();    }


    public interface SysctlsNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1SysctlFluent<io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.SysctlsNested<N>> {

            public N and();
            public N endSysctl();    }


    public interface WindowsOptionsNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1WindowsSecurityContextOptionsFluent<io.kubernetes.client.openapi.models.V1PodSecurityContextFluent.WindowsOptionsNested<N>> {

            public N and();
            public N endWindowsOptions();    }


}
